package br.com.massai.model.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.com.massai.view.enums.CateriaServicoEnum;

@Entity
@Table(name = "ITEM_SERVICO", schema = "PORTAL")
@SequenceGenerator(name = "seqItemServico", sequenceName = "seq_item_servico", allocationSize = 1)
@NamedQueries({
	@NamedQuery(name = "ItemServico.findAll", query = "SELECT i FROM ItemServico i"),
	@NamedQuery(name = "ItemServico.duplicata", query = "SELECT COUNT(i) FROM ItemServico i WHERE LOWER(i.descricao) = LOWER(:descricao) AND i.unidadeMedida = :unidadeMedida AND i.id <> :id")
})
public class ItemServico implements Serializable {

	private static final long serialVersionUID = 2832126924003928290L;

	@Id
	@GeneratedValue(generator = "seqItemServico", strategy = GenerationType.SEQUENCE)
	@Column(name = "ID_ITEM_SERVICO")
	private Long id;

	@Column(name = "DESCRICAO", length = 255, nullable = false, columnDefinition = "VARCHAR(255)")
	private String descricao;

	@Column(name = "NIVEL", nullable = false)
	private Integer nivel;

//	@Column(name = "CODIGO_PAI", length = 10, nullable = true, columnDefinition = "VARCHAR(10)")
//	private String nivelPai;
	
	@Enumerated(EnumType.STRING)
	@Column(name = "CODIGO_PAI", length = 255, columnDefinition = "VARCHAR(255)")
	private CateriaServicoEnum nivelPai;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_UNIDADE_MEDIDA", referencedColumnName = "ID_UNIDADE_MEDIDA")
	private UnidadeMedida unidadeMedida;

	public ItemServico() {
		this.unidadeMedida = new UnidadeMedida();
	}

	public ItemServico(String descricao) {
		this();
		this.descricao = descricao;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public UnidadeMedida getUnidadeMedida() {
		return unidadeMedida;
	}

	public void setUnidadeMedida(UnidadeMedida unidadeMedida) {
		this.unidadeMedida = unidadeMedida;
	}

	public CateriaServicoEnum getNivelPai() {
		return nivelPai;
	}

	public void setNivelPai(CateriaServicoEnum nivelPai) {
		this.nivelPai = nivelPai;
	}

	public Integer getNivel() {
		return nivel;
	}

	public void setNivel(Integer nivel) {
		this.nivel = nivel;
	}
}
